package com.it.util;

import lombok.Data;


/**
 * 结果
 *
 * @param <T> 返回数据的类型
 */
@Data
public class Result<T> {

    private Integer code;
    private String message;
    private T data;

    private Result() {} // 私有化构造器

    public static <T> Result<T> success() {
        return success(null);
    }

    public static <T> Result<T> success(T data) {
        return new Result<T>()
                .code(ResultCodeEnum.SUCCESS.getCode())
                .message(ResultCodeEnum.SUCCESS.getMessage())
                .data(data);
    }

    public static <T> Result<T> fail() {
        return fail(null);
    }

    public static <T> Result<T> fail(T data) {
        return new Result<T>()
                .code(ResultCodeEnum.FAIL.getCode())
                .message(ResultCodeEnum.FAIL.getMessage())
                .data(data);
    }

    /**
     * 构建失败的结果对象
     *
     * @param message 错误消息
     * @param code 错误码
     * @return 失败的结果对象
     */
    public static <T> Result<T> buildFail(String message, Integer code) {
        return new Result<T>()
                .code(code)
                .message(message);
    }

    /**
     * 设置返回数据
     *
     * @param data 返回数据
     * @return 当前Result对象
     */
    public Result<T> data(T data) {
        this.setData(data);
        return this;
    }

    /**
     * 设置返回消息
     *
     * @param message 返回消息
     * @return 当前Result对象
     */
    public Result<T> message(String message) {
        this.setMessage(message);
        return this;
    }

    /**
     * 设置返回码
     *
     * @param code 返回码
     * @return 当前Result对象
     */
    public Result<T> code(Integer code) {
        this.setCode(code);
        return this;
    }

    // getter 和 setter 方法省略...
}
